
using System;
using Core.Base;
using Core.Contracts.Enums;
using Core.Contracts.Interfaces;
using Core.Features;
using Core.Resources;
using Core.Extensions;

namespace Core.Items.Robots
{
    /// <summary>
    /// Symbiont mk2 robot class
    /// </summary>
    
    public sealed class SymbiontMk2 : RobotBase
    {
        /// <summary>
        /// Create a new instance of the <see cref="T:Core.Items.Robots.SymbiontMk2"/> class.
        /// </summary>
        public SymbiontMk2()
            : base(
            "Symbiont Mk2",
            Traduction.desc_symbiont,
            FactionsEnum.Industrial,
            RobotTechnologyLevel.Mk2,
            RobotSizesEnum.HeavyMech,
            new ISlot[]{ 
				new Slot(0, SlotGroupsEnum.Chassis, SlotTypesEnum.Industrial, SizesEnum.Small|SizesEnum.Medium),
				new Slot(1, SlotGroupsEnum.Chassis, SlotTypesEnum.Industrial, SizesEnum.Small|SizesEnum.Medium),
				new Slot(2, SlotGroupsEnum.Chassis, SlotTypesEnum.Misc|SlotTypesEnum.Industrial, SizesEnum.Small|SizesEnum.Medium),
				new Slot(3, SlotGroupsEnum.Chassis, SlotTypesEnum.Misc|SlotTypesEnum.Industrial, SizesEnum.Small|SizesEnum.Medium),
				new Slot(4, SlotGroupsEnum.Chassis, SlotTypesEnum.Misc|SlotTypesEnum.Industrial, SizesEnum.Small|SizesEnum.Medium),
				new Slot(5, SlotGroupsEnum.Chassis, SlotTypesEnum.Turret|SlotTypesEnum.Missile|SlotTypesEnum.Misc, SizesEnum.Small|SizesEnum.Medium),
				new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Head, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules),
				new Slot(SlotGroupsEnum.Legs, SlotTypesEnum.Modules), },
            new IFeature<object>[]{ 
				new AccumulatorCapacity<double>(3250),
				new AccumulatorRechargeTime<double>(360),
				new CpuPerformance<double>(450),
				new ReactorPerformance<double>(825),
				new ArmorAmount<double>(2850),
				new ChemicalResistance<double>(30),
				new KineticResistance<double>(45),
				new SeismicResistance<double>(45),
				new ThermalResistance<double>(45),
                new ChemicalEHP<double>(0),
                new KineticEHP<double>(0),
                new SeismicEHP<double>(0),
                new ThermalEHP<double>(0),
				new SurfaceHitSize<double>(11.00),
				new InterferenceEmission<double>(4.00),
				new InterferenceMinimum<double>(75.00),
				new InterferencePeak<double>(340.00),
				new InterferenceRadius<double>(200.00),
				new LockingRange<double>(210),
				new LockingTime<double>(12.50),
				new MaximumTargets<double>(6),
				new MissileGuidanceFailure<double>(0.1),
				new SensorStrength<double>(85),
				new SignalDetection<double>(75.00),
				new SignalMasking<double>(75.00),
				new ReloadingTime<double>(10),
				new CargoCapacity<double>(21.00),
				new RobotMass<double>(48900.00),
				new SlopeCapacity<double>(51),
				new TopSpeed<double>(57.60),
				new Volume<double>(31.00),
                new DemobilizerResistance<double>(0),
                new CriticalHitChance<double>(0)},

             new IBonusModifier[]
             { 
                new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.HarvesterCycleTime, 0.05){ Unit = UnitsEnum.Percentage, DisplayName = "Harvester cycle time" },
                new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.HarvestedAmount, 0.05){ Unit = UnitsEnum.Percentage, DisplayName = "Harvested amount" },
                new BonusModifier<AdvancedRobotics>( FeatureTypesEnum.Module, FeaturesEnum.TerraformerCycleTime, 0.05){ Unit = UnitsEnum.Percentage, DisplayName = "Terraformer cycle time"},
                new BonusModifier<IndustrialRobotControl>( FeatureTypesEnum.Module, FeaturesEnum.IndustrialCpuUsage, -0.01){ Unit = UnitsEnum.Percentage, DisplayName = "Mining and Havesting module CPU usage" },
                new BonusModifier<IndustrialRobotControl>( FeatureTypesEnum.Module, FeaturesEnum.HarvestedAmount, 0.01){ Unit = UnitsEnum.Percentage, DisplayName = "Harvested amount" },
            },
            new ICondition<IExtension>[]
                {
                    new ExtensionCondition<IndustrialRobotControl>(10), 
                    new ExtensionCondition<AdvancedRobotics>(4)
                })
        {
        }
    }
}